package stack.Leetcode;

import java.util.Stack;

/**
 * 使用两个栈s1和s2，s1是保存元素，s2是保存最小元素
 * 当s2为空时，直接入栈，当s2的栈顶元素>当前元素，直接入栈
 * 当s2的栈顶元素<当前元素时，就把顶元素在入栈一次（s2的元素个数要和s1的元素个数爆出一致）
 * 最后s2的栈顶元素就是最小值
 */
public class Num125 {
    //s1保存实际元素
    private Stack<Integer> s1=new Stack<>();
    //s2栈顶永远是最小值
    private Stack<Integer> s2=new Stack<>();

        public void push(int val) {
          s1.push(val);
          if (s2.isEmpty()){
              s2.push(val);
          }else{
              int peek=s2.peek();
              s2.push(Math.min(val,peek));
          }
        }

        public void pop() {
            s1.pop();
            s2.pop();
        }

        public int top() {
            return s1.peek();
        }

        public int getMin() {
            return s2.peek();
        }
    }

